﻿using FlexFlow.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlexFlow.Base.Interface
{
    /// <summary>
    /// 表示通知文件夹实体工厂
    /// </summary>
    public interface INotificationCatalogProvider : IPhysicalEntityProvider<NotificationCatalog>
    {
        /// <summary>
        /// 取得满足指定条件的通知文件夹
        /// </summary>
        /// <param name="sender">
        /// 发送者
        /// </param>
        /// <param name="type">
        /// 通知类型
        /// </param>
        /// <param name="reciver">
        /// 接收者
        /// </param>
        /// <returns>
        /// 若指定文件夹存在，则返回文件夹，否则返回null
        /// </returns>
        NotificationCatalog Get(string sender, NotificationType type, Guid reciver);
        /// <summary>
        /// 设置指定id的通知文件夹的通知数量
        /// </summary>
        /// <param name="id">
        /// 要操作的通知文件夹id
        /// </param>
        /// <param name="sum">
        /// 要设置的数量
        /// </param>
        /// <returns>
        /// 一个表示操作是否成功的值
        /// </returns>
        /// <remarks>
        /// 本操作会级联更新LastCountTime，请在判断LastCountTime与LastTrigerTime之后再尝试设置
        /// </remarks>
        bool SetCount(Guid id, int count);
        /// <summary>
        /// 更新指定文件夹的最后触发时间
        /// </summary>
        /// <param name="id">
        /// 要设置的文件夹的id
        /// </param>
        /// <param name="triggerTime">
        /// 要设置的最后触发事件
        /// </param>
        /// <returns>
        /// 一个值，表示设置是否成功
        /// </returns>
        bool UpdateTrigger(Guid id, DateTime triggerTime);
        /// <summary>
        /// 取得指定用户的通知文件夹列表
        /// </summary>
        /// <param name="uid">
        /// 用户ID
        /// </param>
        /// <param name="getCount">
        /// 要取得的文件夹数量
        /// </param>
        /// <param name="allCount">
        /// 用户通知文件夹总数量
        /// </param>
        /// <returns>
        /// 取得的通知文件夹列表
        /// </returns>
        List<NotificationCatalog> GetUserCatalogs(Guid uid, int getCount, out long allCount);
    }
}
